package com.uni.elc.dhscale;

import java.io.UnsupportedEncodingException;

/**
 * @author ：liujl
 * @date ：Created 2023/8/26 09:45
 * @description：大华电子秤相关工具类
 */
public class DhScaleUtils {

    /**
     * 合并两个byte数组
     * @param bt1 第一个byte数组
     * @param bt2 第二个byte数组
     * @return 合并后的byte数组
     */
    public static byte[] byteMerger(byte[] bt1, byte[] bt2){
        byte[] bt3 = new byte[bt1.length + bt2.length];
        System.arraycopy(bt1, 0, bt3, 0, bt1.length);
        System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length);
        return bt3;
    }

    /**
     * byte转16进制字符串
     * @param b 一个字节
     * @return 16进制字符串
     */
    public static String bytes2HexString(byte b) {
        return bytes2HexString(new byte[] { b });
    }

    /**
     * byte数组转16进制字符串
     * @param b byte数组
     * @return 16进制字符串
     */
    public static String bytes2HexString(byte[] b) {
        String ret = "";
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            ret += hex.toUpperCase();
        }
        return ret;
    }

    /**
     * 字符串转大华电子秤区域码
     * @param str 字符串
     * @return 大华电子秤区域码
     */
    public static String StringToAreaByteCode(String str) {
        String result = "";
        for (int i = 0; i < str.length(); i++) {
            result += charToAreaByteCode(str.charAt(i));
        }

        return result;
    }

    /**
     * 字符转大华电子秤区域码
     * @param str 字符
     * @return 大华电子秤区域码
     */
    public static String charToAreaByteCode(char str) {
        byte[] bs = new byte[0];
        String singleStr = String.valueOf(str);
        try {
            bs = singleStr.getBytes("GB2312");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // 正常字符
        if (bs.length == 2) {
            String s = "";
            String t = "";
            for (int i = 0; i < bs.length; i++) {
                int a = Integer.parseInt(bytes2HexString(bs[i]), 16);
                t = (a - 0x80 - 0x20) + "";
                if(t.length() == 1){
                    t = 0 + t;
                }
                s += t;
            }

            return s;
            // ascii 码
        } else if (bs.length == 1) {
            String qw = Integer.parseInt(bytes2HexString(bs[0]), 16) - 0x21 + 301 + "";
            while (qw.length() < 4) {
                qw = "0" + qw;
            }
            return qw;
        } else {
            return "";
        }
    }
}
